import { IPSModelObject } from '../../ipsmodel-object';
import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDEField } from './ipsdefield';
import { IPSDEFieldObject } from './ipsdefield-object';
import { IPSDERBase } from '../der/ipsderbase';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEFSearchMode
 */
export interface IPSDEFSearchMode extends IPSDEFieldObject, IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 目标实体属性搜索模式
   *
   * @type {IPSDEFSearchMode}
   */
  getDstPSDEFSearchMode(): IPSDEFSearchMode | null;

  /**
   * 目标实体属性搜索模式
   *
   * @type {IPSDEFSearchMode}
   */
  get dstPSDEFSearchMode(): IPSDEFSearchMode | null;

  /**
   * 目标实体属性搜索模式（必须存在）
   *
   * @type {IPSDEFSearchMode}
   */
  getDstPSDEFSearchModeMust(): IPSDEFSearchMode;

  /**
   * 目标实体属性对象
   *
   * @type {IPSDEField}
   */
  getDstPSDEField(): IPSDEField | null;

  /**
   * 目标实体属性对象
   *
   * @type {IPSDEField}
   */
  get dstPSDEField(): IPSDEField | null;

  /**
   * 目标实体属性对象（必须存在）
   *
   * @type {IPSDEField}
   */
  getDstPSDEFieldMust(): IPSDEField;

  /**
   * 目标实体对象
   *
   * @type {IPSDataEntity}
   */
  getDstPSDataEntity(): IPSDataEntity | null;

  /**
   * 目标实体对象
   *
   * @type {IPSDataEntity}
   */
  get dstPSDataEntity(): IPSDataEntity | null;

  /**
   * 目标实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getDstPSDataEntityMust(): IPSDataEntity;

  /**
   * 项标记
   * @type {string}
   */
  itemTag: string;

  /**
   * 项标记2
   * @type {string}
   */
  itemTag2: string;

  /**
   * 相关实体关系对象
   *
   * @type {IPSDERBase}
   */
  getPSDER(): IPSDERBase | null;

  /**
   * 相关实体关系对象
   *
   * @type {IPSDERBase}
   */
  get psDER(): IPSDERBase | null;

  /**
   * 相关实体关系对象（必须存在）
   *
   * @type {IPSDERBase}
   */
  getPSDERMust(): IPSDERBase;

  /**
   * 标准数据类型
   * @description 值模式 [属性标准数据类型] {0：UNKNOWN、 1：BIGINT、 2：BINARY、 3：BIT、 4：CHAR、 5：DATETIME、 6：DECIMAL、 7：FLOAT、 8：IMAGE、 9：INT、 10：MONEY、 11：NCHAR、 12：NTEXT、 13：NVARCHAR、 14：NUMERIC、 15：REAL、 16：SMALLDATETIME、 17：SMALLINT、 18：SMALLMONEY、 19：SQL_VARIANT、 20：SYSNAME、 21：TEXT、 22：TIMESTAMP、 23：TINYINT、 24：VARBINARY、 25：VARCHAR、 26：UNIQUEIDENTIFIER、 27：DATE、 28：TIME、 29：BIGDECIMAL }
   * @type {( number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29)}
   */
  stdDataType: number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29;

  /**
   * 值格式化
   * @type {string}
   */
  valueFormat: string;

  /**
   * 值处理
   * @type {string}
   */
  valueFunc: string;

  /**
   * 值操作
   * @type {string}
   */
  valueOP: string;

  /**
   * 值分隔符
   * @type {string}
   */
  valueSeparator: string;

  /**
   * 属性为数组
   * @type {boolean}
   * @default false
   */
  array: boolean;

  /**
   * 默认搜索项
   * @type {boolean}
   * @default false
   */
  default: boolean;
}
